/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import Controleur.Moniteur;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author Valentin
 */
public class MoniteurDAO extends DAO<Moniteur> {

    public MoniteurDAO(Connection conn) {
        super(conn);
    }

    @Override
    public void insert(Moniteur moniteur) throws SQLException {
         String query = " INSERT INTO"
                      + " moniteurs"
                      + " (Nom, Prenom)"
                      + " VALUES (\""+moniteur.getNom()+"\",\""+moniteur.getPrenom()+"\")";                       
     
      state.executeUpdate(query, state.RETURN_GENERATED_KEYS); 
        try (ResultSet rs = state.getGeneratedKeys()) {
            ResultSetMetaData rsmd = rs.getMetaData();
            int columnCount = rsmd.getColumnCount();
              if (rs.next()) {
                 do {
                    for (int i=1; i<=columnCount; i++) {
                       int key = rs.getInt(i);
                       moniteur.setNumSecu(key);
                    }
                 } while(rs.next());
              }
              else {
                 moniteur.setNumSecu(-1);
              }
        }
    }

    @Override
    public void delete(Moniteur moniteur)  throws SQLException{     
         String query = " DELETE FROM"
                      + " moniteurs"
                      + " WHERE IDMoniteur ="
                      + moniteur.getNumSecu();                           
     
       state.executeUpdate(query);
    }

    @Override
    public void update(Moniteur moniteur) throws SQLException{  
         String query = " UPDATE  moniteurs"
                      + " SET Nom = "+"\""+ moniteur.getNom()+"\""
                      + " ,Prenom = "+"\""+ moniteur.getPrenom()+"\""
                      + " WHERE IDMoniteur = "+ moniteur.getNumSecu();                                             
     
       state.executeUpdate(query);
    }

    @Override
    public Moniteur findByID(java.lang.Integer id) throws SQLException {

        Moniteur myMoniteur = new Moniteur();
        String query = " SELECT *"
                + " FROM moniteurs"
                + " WHERE IDMoniteur = "
                + id;
        
        queryResult = state.executeQuery(query);
        while(queryResult.next()){
            //ID
            if (queryResult.getInt("IDMoniteur") != 0){
                myMoniteur.setNumSecu(queryResult.getInt("IDMoniteur"));
            }
            else{
                myMoniteur.setNumSecu(-1);
            }
            //Nom
            if (queryResult.getString("Nom")!= null){
            myMoniteur.setNom(queryResult.getString("Nom"));
            }
            else{
                myMoniteur.setNom("");
            }
            //Prenom
            if(queryResult.getString("Prenom")!= null){
                 myMoniteur.setPrenom(queryResult.getString("Prenom"));
            }
            else{
                myMoniteur.setPrenom("");
            }
           
        }
        return myMoniteur;
    }
    @Override
    public Map<Integer, Moniteur> findAll() throws SQLException {
        Map myMap = new HashMap();
        
        String query = " SELECT *"
                + " FROM moniteurs";
                
        
        queryResult = state.executeQuery(query);
        while(queryResult.next()){
            Moniteur myMoniteur = new Moniteur();
            
            myMoniteur.setNumSecu(queryResult.getInt("IDMoniteur"));
           
            //Nom
            if (queryResult.getString("Nom")!= null){
            myMoniteur.setNom(queryResult.getString("Nom"));
            }
            else{
                myMoniteur.setNom("");
            }
            //Prenom
            if(queryResult.getString("Prenom")!= null){
                 myMoniteur.setPrenom(queryResult.getString("Prenom"));
            }
            else{
                myMoniteur.setPrenom("");
            }
            
            if(myMoniteur.getNumSecu()>0)
               myMap.put(myMoniteur.getNumSecu(),myMoniteur);
        }
        return myMap;
    }
}

